/**
 * Swagger文档解析示例
 * 展示如何使用chic-core的Swagger工具生成API接口和类型定义
 */

import { SwaggerParser, loadSwaggerFromUrl, generateApiClient } from '../src/utils/swagger.js';

// 示例1: 解析本地Swagger文档
console.log('=== 解析本地Swagger文档 ===');

// 模拟一个Swagger文档
const mockSwaggerDoc = {
  openapi: '3.0.0',
  info: {
    title: '用户管理API',
    version: '1.0.0',
    description: '用户管理相关接口'
  },
  paths: {
    '/api/users': {
      get: {
        operationId: 'getUsers',
        summary: '获取用户列表',
        description: '分页获取用户列表',
        tags: ['用户管理'],
        parameters: [
          {
            name: 'page',
            in: 'query',
            description: '页码',
            required: false,
            schema: { type: 'integer', default: 1 }
          },
          {
            name: 'size',
            in: 'query',
            description: '每页数量',
            required: false,
            schema: { type: 'integer', default: 10 }
          }
        ],
        responses: {
          '200': {
            description: '成功',
            content: {
              'application/json': {
                schema: {
                  type: 'object',
                  properties: {
                    code: { type: 'integer' },
                    message: { type: 'string' },
                    data: {
                      type: 'array',
                      items: { $ref: '#/components/schemas/User' }
                    }
                  }
                }
              }
            }
          }
        }
      },
      post: {
        operationId: 'createUser',
        summary: '创建用户',
        description: '创建新用户',
        tags: ['用户管理'],
        requestBody: {
          required: true,
          content: {
            'application/json': {
              schema: { $ref: '#/components/schemas/CreateUserRequest' }
            }
          }
        },
        responses: {
          '201': {
            description: '创建成功',
            content: {
              'application/json': {
                schema: { $ref: '#/components/schemas/User' }
              }
            }
          }
        }
      }
    },
    '/api/users/{id}': {
      get: {
        operationId: 'getUserById',
        summary: '根据ID获取用户',
        description: '根据用户ID获取用户详情',
        tags: ['用户管理'],
        parameters: [
          {
            name: 'id',
            in: 'path',
            required: true,
            schema: { type: 'integer' }
          }
        ],
        responses: {
          '200': {
            description: '成功',
            content: {
              'application/json': {
                schema: { $ref: '#/components/schemas/User' }
              }
            }
          }
        }
      }
    }
  },
  components: {
    schemas: {
      User: {
        type: 'object',
        properties: {
          id: { type: 'integer' },
          name: { type: 'string' },
          email: { type: 'string' },
          status: { 
            type: 'string',
            enum: ['active', 'inactive', 'pending']
          },
          createdAt: { type: 'string', format: 'date-time' }
        },
        required: ['id', 'name', 'email']
      },
      CreateUserRequest: {
        type: 'object',
        properties: {
          name: { type: 'string' },
          email: { type: 'string' },
          password: { type: 'string' }
        },
        required: ['name', 'email', 'password']
      },
      UserStatus: {
        type: 'string',
        enum: ['active', 'inactive', 'pending'],
        description: '用户状态枚举'
      }
    }
  }
};

// 创建解析器实例
const parser = new SwaggerParser(mockSwaggerDoc);

// 解析所有API接口
const apis = parser.parseApis();
console.log('解析到的API接口数量:', apis.length);

// 显示第一个API的详细信息
if (apis.length > 0) {
  console.log('第一个API详情:', JSON.stringify(apis[0], null, 2));
}

// 解析所有枚举
const enums = parser.parseEnums();
console.log('解析到的枚举数量:', enums.length);
console.log('枚举信息:', enums);

// 生成TypeScript类型定义
const types = parser.generateTypeScriptTypes();
console.log('\n=== 生成的TypeScript类型定义 ===');
console.log(types);

// 生成API调用方法
const methods = parser.generateApiMethods();
console.log('\n=== 生成的API调用方法 ===');
console.log(methods);

// 示例2: 从URL加载Swagger文档
console.log('\n=== 从URL加载Swagger文档 ===');

// 注意：这里需要替换为实际的Swagger文档URL
const swaggerUrl = 'https://petstore.swagger.io/v2/swagger.json';

try {
  // 加载Swagger文档（注释掉以避免实际网络请求）
  // const urlParser = await loadSwaggerFromUrl(swaggerUrl);
  // console.log('从URL加载成功');
  
  console.log('从URL加载示例（已注释，避免实际网络请求）');
} catch (error) {
  console.log('从URL加载失败:', error.message);
}

// 示例3: 生成完整的API客户端代码
console.log('\n=== 生成完整的API客户端代码 ===');

const apiClient = generateApiClient(parser);
console.log('完整API客户端代码长度:', apiClient.length);
console.log('前500个字符:', apiClient.substring(0, 500) + '...');

// 示例4: 实际使用场景
console.log('\n=== 实际使用场景示例 ===');

// 模拟实际项目中的使用
function generateApiFromSwagger(swaggerDoc) {
  const parser = new SwaggerParser(swaggerDoc);
  
  // 生成类型定义文件
  const typeDefinitions = parser.generateTypeScriptTypes();
  
  // 生成API方法文件
  const apiMethods = parser.generateApiMethods();
  
  // 生成完整的客户端
  const fullClient = generateApiClient(parser);
  
  return {
    types: typeDefinitions,
    methods: apiMethods,
    fullClient: fullClient,
    apis: parser.parseApis(),
    enums: parser.parseEnums()
  };
}

// 使用示例
const generatedCode = generateApiFromSwagger(mockSwaggerDoc);
console.log('生成的代码统计:');
console.log('- 类型定义行数:', generatedCode.types.split('\n').length);
console.log('- API方法行数:', generatedCode.methods.split('\n').length);
console.log('- 总API数量:', generatedCode.apis.length);
console.log('- 枚举数量:', generatedCode.enums.length);

console.log('\n=== Swagger解析示例完成 ===');

